package com.yangwudi.mapper;

import com.yangwudi.pojo.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper //应用程序在运行时，会自动为该接口创建一个实现类对象（代理对象），并且会自动将该实现类对象添加到IOC容器中 -bean
public interface UserMapper {

    /**
     * 查询所有用户
     */
//    @Select("select * from user")     //XML映射配置
    public List<User> findAll();


    /**
     * 根据id删除用户
     */
//    @Delete("delete from user where id = ${id}")      //拼接符 ${}   直接将参数拼接在SQL语句中，存在SQL注入问题    不安全，性能低
    @Delete("delete from user where id = #{id}")        //占位符 #{}   生成预编译SQL    参数值传递，安全，性能高（推荐）
//    public void  deleteById(Integer id);
    public Integer deleteById(Integer id);      //返回值：影响的记录数

    /**
     * 添加用户
     */
    @Insert("insert into user(username, password, name, age) values (#{username},#{password},#{name},#{age})")
    public void insert(User user);

    /**
     * 更新用户
     */
    @Update("update user set username=#{username},password=#{password},name=#{name},age=#{age} where id =#{id}")
    public void update(User user);

    /**
     * 根据用户名和密码查询用户信息
     */
    @Select("select * from user where username=#{username} and password=#{password}")
    //@Param注解的作用是为接口的方法形参起名字的  当有多个形参时需要使用@Param注解
    public User findByUsernameAndPassword(@Param("username") String username, @Param("password") String password);

    //说明:基于官方骨架创建的springboot项目中，接口编译时会保留方法的形参名称，因此，@Param注解可以省略（#{形参名称}）
//    public User findByUsernameAndPassword(String username, String password);

}
